

package cn.shengchao.examstar.product.acl.adapters.repositories.factories;

import cn.hutool.core.util.StrUtil;
import cn.shengchao.base.enums.DisEnableStatusEnum;
import cn.shengchao.examstar.product.domain.entity.Course;
import cn.shengchao.examstar.product.domain.valobj.Price;
import cn.shengchao.examstar.product.domain.valobj.ProductName;
import cn.shengchao.examstar.product.infrastructure.dao.po.TProductCourse;
import cn.shengchao.examstar.rpc.product.req.SaveCourseInfo;

import java.util.Arrays;

public class CourseFactory extends AbstractProductFactory<TProductCourse, Course> {

    private TProductCourse datasource;

    public static Course of(SaveCourseInfo saveCourseInfo) {
        Course course = new Course();
        course.setCardUrl(saveCourseInfo.getCardUrl());
        course.setId(saveCourseInfo.getId());
        ProductName name = ProductName.of(saveCourseInfo.getProductName());
        course.setName(name);
        course.setPrice(Price.of(saveCourseInfo.getPrice()));
        course.setDiscountPrice(Price.of(saveCourseInfo.getDiscountPrice()));
        course.setDetails(saveCourseInfo.getDetails());
        course.setImageUrl(saveCourseInfo.getImageUrl());
        if (StrUtil.isNotEmpty(saveCourseInfo.getSpecificationType())) {
            //字符串转数组
            course
                    .setSpecificationType(Arrays
                            .asList(saveCourseInfo.getSpecificationType().split(",")));
        }
        course.setStatus(saveCourseInfo.getStatus().equals("1")
                ? DisEnableStatusEnum.ENABLE
                : DisEnableStatusEnum.DISABLE);
        course.setScore(0.0);
        course.setSort(saveCourseInfo.getSort());
        course.setVirtualPurchaseNum(0);
        course.setActualPurchaseNum(0);
        course.setIsVirtual(false);
        course.setIsLogistics(false);
        course.setClassHour(saveCourseInfo.getClassHour());
        return course;
    }

    @Override
    protected Course initProduct(TProductCourse datasource) {
        this.datasource = datasource;
        return new Course();
    }

    @Override
    public Course createThumbnailProduct(TProductCourse datasource) {
        Course course = super.createThumbnailProduct(datasource);
        course.setKnowledgeNodeNum(datasource.getKnowledgeNodeNum());
        course.setCardUrl(datasource.getCardUrl());
        course.setClassHour(datasource.getClassHour());
        course.setCourseType(datasource.getCourseType());
        return course;
    }

    @Override
    public Course afterCreateProduct(Course product) {
        return product;
    }
}
